// package com->alibaba->druid->sql->ast;

// import com->alibaba->druid->sql->ast->expr->SQLIdentifierExpr;
// import com->alibaba->druid->sql->ast->statement->SQLAssignItem*;
// import com->alibaba->druid->sql->visitor->SQLASTVisitor*;

// import java->util->ArrayList;
// import java->util->std::list;

/**
 * version 1->0
 * Author zzy
 * Date 2019-06-04 11:48
 */

#pragma once

#include <list>
#include <string>

#include "SQLExpr.h"
#include "SQLObjectImpl.h"

#include "expr/SQLIdentifierExpr.h"
#include "statement/SQLAssignItem.h"

class SQLIndexOptions
    : virtual public SQLObjectImpl
{
public:
  string_ptr indexType; // Using btree/hash
  SQLExpr_ptr keyBlockSize;
  string_ptr parserName;
  SQLExpr_ptr comment;
  string_ptr algorithm;
  string_ptr lock;
  BOOL_ptr invisible;
  BOOL_ptr visible;
  BOOL_ptr global;
  BOOL_ptr local;
  SQLAssignItem_list_ptr otherOptions;

  SQLIndexOptions();
  SHAREDOBJECT(SQLIndexOptions);

  string_ptr getIndexType();

  void setIndexType(string_ptr indexType);

  SQLExpr_ptr getKeyBlockSize();

  BOOL_ptr isGlobal();

  void setGlobal(BOOL_ptr global);

  BOOL_ptr isLocal();

  void setLocal(BOOL_ptr local);

  void setKeyBlockSize(SQLExpr_ptr keyBlockSize);

  string_ptr getParserName();

  void setParserName(string_ptr parserName);

  SQLExpr_ptr getComment();

  void setComment(SQLExpr_ptr comment);

  string_ptr getAlgorithm();

  void setAlgorithm(string_ptr algorithm);

  string_ptr getLock();

  void setLock(string_ptr lock);

  BOOL_ptr isInvisible();

  void setInvisible(BOOL_ptr invisible);

  BOOL_ptr isVisible();

  void setVisible(BOOL_ptr visible);

  SQLAssignItem_list_ptr getOtherOptions();

  void accept0(SQLASTVisitor_ptr visitor) override;

  void cloneTo(SQLIndexOptions_ptr options);
};
